<?php
/**
 * Componente para gera��o de elementos html
 * 
 * @author felipe moura
 * @package Emec
 */
class Voitech_Element 
{
		protected $_element;
		protected $_name;
		protected $_closeTags = array( 'img','br','input','hr' );
		protected $_value;
		/**
		 * Metodo construtor, inicia a cria��o de um elemento
		 * Lan�a uma exce��o do tipo Emec_Exception_erro em caso de erro
		 * 		 
		 * @param array $atributos 
		 */
		public function __construct( $elemento, array $atributos = array() )
		{
			if( empty( $elemento ) ){
				throw new Voitech_Exception('Erro: elemento n&atilde;o pode ser criado!');
				exit;
			}
			$this->_name = $elemento;
			$this->_element = "<".$elemento." ";
			if( !empty( $atributos ) )
			{
				$this->addAttrs( $atributos );
			}
		}
		
		/**
		 * Metodo para adicionar varios atributos
		 * 
		 * @access public
		 * @param array - atributos
		 * @return string
		 */
		public function addAttrs( array $atributos = array() )
		{
			if ( count( $atributos ) > 0 )
			{
				foreach( $atributos as $chave=>$valor )
				{
					$this->addAttr( $chave, $valor );
				}
			}
		}
		
		/**
		 * metodo para adicionar um atributo
		 * 
		 * @access public
		 * @param string atributo
		 * @param string valor
		 */
		public function addAttr( $attr, $valor )
		{
			$this->_element .= $attr.'="'.$valor.'" ';
		}

		/**
		 * Metodo para setar os valor que vai no elemento
		 * 
		 * @param string
		 */
		public function setValue( $valor )
		{
			$this->_value[] = $valor;		
		}
		
		/**
		 * Metodo para retornar o elemento pronto
		 * @return string html
		 */
		public function show()
		{
			
			if( in_array( strtolower( $this->_name ), $this->_closeTags ) )
			{
			    return $this->_element .= " />";
			}
			else if( is_array( $this->_value ) )
			{
				return $this->_element .= ">".implode( '', $this->_value )."</".$this->_name.">";
			}
			else
			{
				return $this->_element .= ">".$this->_value."</".$this->_name.">";
			}
		}
		
}